#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL.Times;
using Cephei.QL.Indexes;
using Cephei.QL.Termstructures;
namespace Cephei.QL.Cashflows
{
    /// <summary> 
	/// ! \ingroup instruments  \test - the correctness of the returned value in case of Asset-or-nothing embedded option is tested by pricing the digital option with Cox-Rubinstein formula. - the correctness of the returned value in case of deep-in-the-money Asset-or-nothing embedded option is tested vs the expected values of coupon and option. - the correctness of the returned value in case of deep-out-of-the-money Asset-or-nothing embedded option is tested vs the expected values of coupon and option. - the correctness of the returned value in case of Cash-or-nothing embedded option is tested by pricing the digital option with Reiner-Rubinstein formula. - the correctness of the returned value in case of deep-in-the-money Cash-or-nothing embedded option is tested vs the expected values of coupon and option. - the correctness of the returned value in case of deep-out-of-the-money Cash-or-nothing embedded option is tested vs the expected values of coupon and option. - the correctness of the returned value is tested checking the correctness of the call-put parity relation. - the correctness of the returned value is tested by the relationship between prices in case of different replication types.
	/// </summary>
    [Guid ("7C10FAD7-7EA9-4ad7-805C-758CA8C19C76"),ComVisible(true)]
	public interface IDigitalCoupon : Cephei.QL.Cashflows.IFloatingRateCoupon
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 Double CallDigitalPayoff {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double CallOptionRate {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double CallStrike {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double ConvexityAdjustment {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Boolean HasCall {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Boolean HasCollar {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Boolean HasPut {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Boolean IsLongCall {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Boolean IsLongPut {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double PutDigitalPayoff {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double PutOptionRate {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double PutStrike {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double Rate {get;}
        /// <summary> 
		/// 
		/// </summary>
		 IDigitalCoupon SetPricer(Cephei.QL.Cashflows.IFloatingRateCouponPricer pricer);
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Cashflows.IFloatingRateCoupon Underlying {get;}
        /// <summary> 
		/// 
		/// </summary>
		 IDigitalCoupon Update {get;}
    }   

    /// <summary> 
	/// ! \ingroup instruments  \test - the correctness of the returned value in case of Asset-or-nothing embedded option is tested by pricing the digital option with Cox-Rubinstein formula. - the correctness of the returned value in case of deep-in-the-money Asset-or-nothing embedded option is tested vs the expected values of coupon and option. - the correctness of the returned value in case of deep-out-of-the-money Asset-or-nothing embedded option is tested vs the expected values of coupon and option. - the correctness of the returned value in case of Cash-or-nothing embedded option is tested by pricing the digital option with Reiner-Rubinstein formula. - the correctness of the returned value in case of deep-in-the-money Cash-or-nothing embedded option is tested vs the expected values of coupon and option. - the correctness of the returned value in case of deep-out-of-the-money Cash-or-nothing embedded option is tested vs the expected values of coupon and option. - the correctness of the returned value is tested checking the correctness of the call-put parity relation. - the correctness of the returned value is tested by the relationship between prices in case of different replication types. Factory
	/// </summary>
   	[ComVisible(true)]
    public interface IDigitalCoupon_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        /// <summary> 
		/// 
		/// </summary>
	    IDigitalCoupon Create (Cephei.QL.Cashflows.IFloatingRateCoupon underlying, Microsoft.FSharp.Core.FSharpOption<Double> callStrike, Microsoft.FSharp.Core.FSharpOption<QL.Position.TypeEnum> callPosition, Microsoft.FSharp.Core.FSharpOption<Boolean> isCallITMIncluded, Microsoft.FSharp.Core.FSharpOption<Double> callDigitalPayoff, Microsoft.FSharp.Core.FSharpOption<Double> putStrike, Microsoft.FSharp.Core.FSharpOption<QL.Position.TypeEnum> putPosition, Microsoft.FSharp.Core.FSharpOption<Boolean> isPutITMIncluded, Microsoft.FSharp.Core.FSharpOption<Double> putDigitalPayoff, Microsoft.FSharp.Core.FSharpOption<Cephei.QL.Cashflows.IDigitalReplication> replication, Cephei.QL.Cashflows.IFloatingRateCouponPricer QL_Pricer);
    }
}

